/**
 * @file bsp_nodeID.c
 * @author your name (you@domain.com)
 * @brief 拨码开关底层驱动
 * @version 0.1
 * @date 2022-03-25
 * 
 * @copyright Copyright (c) 2022
 * 
 */
#include "bsp_nodeID.h"
#include "gpio_config.h"
#include "stm32f4xx_hal.h"

static uint8_t g_node_id;   // 节点ID
/**
 * @brief 更新节点ID，拨码开关为3位拨码
 * 
 * @return uint8_t 
 */
void updateNodeId(void)
{
    uint8_t node_id = 0;

    node_id = HAL_GPIO_ReadPin(ID1_GPIO_Port, ID1_Pin) +
              2 * HAL_GPIO_ReadPin(ID2_GPIO_Port, ID2_Pin) +
              4 * HAL_GPIO_ReadPin(ID3_GPIO_Port, ID3_Pin);

    node_id ^= 0x0F;            // 低电平有效，需要取反
	node_id &= ~(0x01 << 3);    // 只有3位拨码，字节最高位需要清零
	g_node_id = node_id;
}

/**
 * @brief 获取节点ID，相关数据在updateNodeId()函数中更新
 * 
 * @return uint8_t 节点ID
 */
uint8_t getNodeId(void)
{
    return g_node_id;
}
